package cn.design.realize;

import java.util.ArrayList;
import java.util.List;

/**
 * @author dlq
 * @description 具体操作 Element 对象
 *      可以是组合模式(实现接口Element)，也可以是集合（不实现接口Element），然后定义了Element集合属性,能够枚举它包含的元素,提供一个接口，允许Vistor访问它的元素
 * @date 2020/10/20 10:30
 * @since 1.0
 */
public class ObjectStructure implements Element{
    private List<Element> elements = new ArrayList<>();

    /**
     * @description 访问者访问元素的入口
     * @param visitor
     * @return void
     * @author dengliqiang
     * @date 2020/10/20 10:50
     */
    @Override
    public void accept(Visitor visitor) {
        if (elements != null){
            elements.forEach(element -> {
                element.accept(visitor);
            });
        }
    }

    /**
     * @description 添加 Element 元素
     * @param element
     * @return java.util.List<cn.design.realize.Element>
     * @author dengliqiang
     * @date 2020/10/20 10:43
     */
    public ObjectStructure addElement(Element element){
        if (!elements.contains(element)){
            elements.add(element);
        }
        return this;
    }

    /**
     * @description 删除 Element 元素
     * @param element
     * @return java.util.List<cn.design.realize.Element>
     * @author dengliqiang
     * @date 2020/10/20 10:43
     */
    public List<Element> removeElement(Element element){
        if (elements.contains(element)){
            elements.removeIf(element::equals);
        }
        return elements;
    }
}
